perm filename PUPSTA.MID[NET,MRC] blob sn#544805 filedate 1980-10-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN PUP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL
C00006 00003	DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY PRJPRG JOBNAM PTYJOB TTYTAB
C00009 00004	PUPSTA
C00011 00005	DPYLUP HDNODM
C00021 00006	PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF
C00028 00007	NODDDM DOIII DODM DELAY NODLAY DELAY1
C00030 00008	TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT
C00032 ENDMK
C⊗;
;PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN PUP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL

TITLE PUPSTAT
SUBTTL Definitions

; Mark Crispin, SU-AI, October 1980

X=1 ? Y=2 ? Z=3 ? L=4 ? I=5 ? N=6 ? DDB=7 ? J=10 ? T=11 ? A=12 ? B=13 ? C=14 ? P=17

PDLLEN==50.				; stack size

; GETLIN bits

IIILIN==400000,,			; terminal is a III
DMLIN==	040000,,			; terminal is a DM
DDDLIN==020000,,			; terminal is a DD

; APRENB bits

ILM==	020000				; MPV occured

; Data Risc command word

DEFINE CW ?C1,B1,C2,B2,C3,B3
 <<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN

; Data Risc command names

EXCT==	0				; execute
FNCN==	1				; function, usual value bytes
	ALPHBG==6 ? ALPHA==46
CHNL==	2				; channel select
COLM==	3				; column select
HILIN==	4				; set high 5 bits of line address
LOLIN==	5				; set low 4 bits of line address
;DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY PRJPRG JOBNAM PTYJOB TTYTAB

SUBTTL Data area

DELAYP:	BLOCK 1				; -1 → don't delay
PDL:	BLOCK PDLLEN			; stack
HSTADR:	BLOCK 1				; where host table begins
LINCNT:	BLOCK 1				; line count
HDABLK:	BLOCK 13			; terminal location block
HSIZE:	BLOCK 1				; horizontal size
SCREEN:	BLOCK 1				; display screen image pointer

; Display program stuff

COLPOS:	CW COLM,2,HILIN,1,LOLIN,10	; second column, second line
TXTOUT:	CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA	; text output

DPHEAD:	200000,,			; double field mode
	0				; size
	0
	0				; address of low order line select for DD

; Monitor pointers

FRSPTY:	0				; TTY # of first PTY

; Pointers indexed by job number

PRJPRG:	(J)				; PPN
JOBNAM:	(J)				; program name

; Pointers indexed by PTY number

PTYJOB:	(T)				; PTY mother

; Pointers indexed by TTY number

TTYTAB:	(T)				; TTY DDB pointer
;PUPSTA

SUBTTL Start of program

PUPSTA:	JFCL
	RESET
	MOVE P,[PDL(-PDLLEN)]
	MOVE JOBFF
	HRRM DPHEAD
	MOVEM DPHEAD+3
	AOS DPHEAD+3
	ADDI 2
	MOVEM SCREEN
	MOVEI [	MOVE JOBREL
		ADDI 2000		; another K of core, please
		CORE
		 JRST 4,PUPSTA
		LOCK
		JRST DPYLUP]		; restart status
	MOVEM JOBAPR
	MOVEI ILM
	APRENB
	LOCK				; ensure fast response
	MOVE [100,,300←5+10]		; map the monitor in
	GETHI
	 JRST 4,.-1
	MOVEI [.RSQZ 0,TCONLN ? 0]
	.SYML
	 JRST 4,.-1
	ADDI 1
	MOVEM FRSPTY
	MOVE 400211			; PRJPRG
	ADDI 400000
	HRRM PRJPRG
	MOVE 400225			; JOBNAM
	ADDI 400000
	HRRM JOBNAM
	MOVE 400270			; PTYJOB
	SUB FRSPTY
	ADDI 400000			; indexed by PTY number
	HRRM PTYJOB
	MOVE 400220			; TTYTAB
	ADDI 400000
	HRRM TTYTAB
	MOVE J,400226			; JOB
	MOVE J,400000(J)
	MOVE L,400236			; JBTLIN
	ADDI L,400000(J)
	MOVE L,(L)
	CAMN L,[-1]
	 EXIT				; punt if detached
	MOVEI L,400000(L)
	ADD L,400302			; LINTAB
	MOVE L,(L)
	HRROI [015000,,HSIZE]
	TTYSET
	PPSEL 1
	DPYPOS -452			; near botton of screen
	DPYSIZ 3002			; 3 glitches, 2 lines/glitch
;	JRST DPYLUP
;DPYLUP HDNODM

DPYLUP:	SETZB @SCREEN
	ADJSP @SCREEN
	AOS
	BLT @JOBREL
	MOVSI X,440700
	HRR X,SCREEN
	SETZM LINCNT
	TLNN (DMLIN)
	 JRST HDNODM
	MOVEI 177
	IDPB X
	MOVEI ↑W
	IDPB X
HDNODM:
;PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF

SUBTTL PTY map

	LDB T,[001100,,400221]		; number of PTY's
	HRLOI T,-1(T)
	EQV T,FRSPTY			; first PTY
	SKIPN J,@PTYJOB
	 AOBJN T,.-1
	JUMPE J,MSGEND
	MOVEI <" >
	IDPB X
	PUSHJ P,TERPRI
	JSP Y,TXTSTR
	 ASCIZ/PTY CJ Usr Subsys SJ Usr Subsys Location/
	PUSHJ P,TERPRI
	JRST PTYFND

PTYLUP:	SKIPN J,@PTYJOB
	 JRST NXTPTY
PTYFND:	MOVEI N,3
	PUSH P,J
	MOVEI Y,(T)
	PUSHJ P,OCTOUT
	MOVEI <" >
	IDPB X
	PUSHJ P,JOBOUT
	HRRZ J,@TTYTAB
	ADD J,400347			; PJOBN
	HRRZS J				; physical address
	PEEK J,				; TTY DDB's may be in upper 128K
	MOVE 400347			; PJOBN
	HRRI J
	LDB J,
	JUMPE J,[	JSP Y,TXTSTR
			 ASCIZ/               /
			JRST GETLOC]
	MOVEI <" >
	IDPB X
	PUSHJ P,JOBOUT
	MOVEI <" >
	IDPB X
GETLOC:	POP P,A				; try for TELSER's 137 convention
	HRROI B,137
	MOVEI C,B
	MOVEI A
	JOBRD
	 JRST NTELSR
	JUMPE B,NTELSR
	TLNE B,-1
	 JRST NTELSR
	HRLI B,-13
	MOVEI C,HDABLK
	JOBRD
	 JRST NTELSR
	MOVE HDABLK
	CAME ['TERMID]
	 JRST NTELSR
	SKIPA Y,[440700,,HDABLK+1]
	 IDPB X
	ILDB Y
	JUMPN .-2
NTELSR:	PUSHJ P,TERPRI
NXTPTY:	AOBJN T,PTYLUP
MSGEND:	MOVEI <" >
	IDPB X
	PUSHJ P,TERPRI
	MOVE Z,HSIZE
	TLNE L,(DDDLIN\DMLIN)
CLREOF:	 CAMG Z,LINCNT
	  JRST NODDDM			; III or printing
	MOVEI <" >
	IDPB X
	PUSHJ P,TERPRI
	SOJA Z,CLREOF
; (continued on next page)
;NODDDM DOIII DODM DELAY NODLAY DELAY1

SUBTTL Display it!

NODDDM:	TLNN X,700000			; if at word boundry
	 ADDI X,1
	SETZM 1(X)			; HALT to stop program
	MOVEI X,(X)
	MOVEI 2(X)
	SUBI @DPHEAD
	MOVEM DPHEAD+1			; save display program length
	AOS (X)
	CAME X,SCREEN
	 SOJA X,.-2

; Now output the accumulated text

	TLNN L,(DDDLIN\IIILIN\DMLIN)
	 JRST [	OUTSTR @SCREEN
		OUTSTR [ASCIZ/

/]
		JRST DELAY]
	JUMPL L,DOIII
	TLNE L,(DMLIN)
	 JRST [	SETZM @DPHEAD
		MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 142]; cursor at third line
		JRST DODM]
	MOVE TXTOUT
	MOVEM @DPHEAD
	SKIPA X,COLPOS
DOIII:	 MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 2 ? 1 ? 2 ? 6]
DODM:	MOVEM X,@DPHEAD+3
	UPGIOT 1,DPHEAD			; display the text

; Done, wait a while and go again

DELAY:	SKIPE DELAYP
	 JRST NODLAY
	MOVEI 20.
	TLNE L,(DDDLIN\IIILIN)
	 MOVEI 1
	TLNE L,(DMLIN)
	 MOVEI 5.
	SLEEP
NODLAY:	SNEAKS
	 JRST DPYLUP
	ANDI 177
	CAIN 175
	 JRST [INCHRW ? SETCMM DELAYP ? JRST DPYLUP] ; ALT toggles the delay flag
	CAIN <" >
	 JRST [INCHRW ? INCHRW ? JRST DPYLUP] ; space holds us
	CAIE ↑M
	 JRST DELAY1
	INCHRW				; only eat CRLF's
	INCHRW
DELAY1:	HRROI [004000,,400\"N]
	TTYSET
	EXIT
;TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT

SUBTTL Random stuff

TERPRI:	JSP Y,TXTSTR
	 ASCIZ/
/
	AOS LINCNT
	TLNN (DMLIN)
	 POPJ P,
	MOVEI 177
	IDPB X
	MOVEI ↑W
	IDPB X
	POPJ P,

; Octal/decimal output of Y.  If N > 0, pad with spaces so it fits in N digits

DECOUT:	SKIPA Z,[10.]
OCTOUT:	 MOVEI Z,8.
	HRRM Z,NUMOUT			; I don't want to fry another AC
NUMOUT:	IDIVI Y,
	ADDI Z,"0
	PUSH P,Z
	SOJLE N,NUMOU1
	JUMPN Y,NUMOU2
	MOVEI Z,<" >
	IDPB Z,X
	SOJG N,.-1
	JRST NUMOU3
NUMOU1:	SKIPE Y
NUMOU2:	 PUSHJ P,NUMOUT
NUMOU3:	POP P,Y
	IDPB Y,X
	POPJ P,

; Job number/PPN/name output

JOBOUT:	MOVEI N,2
	MOVEI Y,(J)
	PUSHJ P,DECOUT
	MOVEI <" >
	IDPB X
	HRLZ Y,@PRJPRG
	MOVEI N,3
	PUSHJ P,SIXOU1
	MOVEI <" >
	IDPB X
	MOVE Y,@JOBNAM
;	JRST SIXOUT

; Sixbit output routine

SIXOUT:	MOVEI N,6
SIXOU1:	SETZ Z,
	ROTC Y,6
	ADDI Z,"A-'A
	IDPB Z,X
	SOJG N,SIXOUT+1
	POPJ P,

; Output text string, called with JSP

TXTSTR:	HRLI Y,440700
	ILDB Y
	JUMPE 1(Y)
	IDPB X
	JRST TXTSTR+1

...LIT:	CONSTA

END PUPSTAT